// 引入axios
import store from "@/store";
import axios from "axios";
import { ElMessage } from "element-plus";
import {isCheckTimeout} from '@/utils/auth'
// 对axios进行二次封装
const service = axios.create({
  // baseURL: process.env.VUE_APP_BASE_API ,
  baseURL:'/api',
  timeout:5000
})
// 请求拦截器
service.interceptors.request.use(
  config => {
    // 添加 icode
    // config.headers.icode = '70150B0CDD46A879'
    // 统一注入token
    if(store.getters.token){
      if(isCheckTimeout()){
        // 超时情况
        store.dispatch('user/logout')
        return Promise.reject(new Error('token 失效'))
      }
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    // 配置接口国际化
      config.headers['Accept-Language'] = store.getters.language
    // 必须返回 config
    return config 
  },
  // 请求失败
  error =>{
    return Promise.reject(error)
  }
)
// 响应拦截器
service.interceptors.response.use(
  response => {
    const { success, msg, data } = response.data
    //   要根据success的成功与否决定下面的操作
    if (success) {
      return data
    } else {
      // 业务错误
      ElMessage.error(msg) // 提示错误消息
      return Promise.reject(new Error(msg))
    }
  },
  error => {
     // token超时
  if(error.response && error.response.data && error.response.data.code === 401){
    // 调用vuex退出登录
    store.dispatch('user/logout')
    ElMessage.error(error.message)
    return Promise.reject(error)
  }else{
    ElMessage.error(error.response?.data?.msg) // 提示错误信息
    return Promise.reject(error)
  }
  
  }
    // TODO: 将来处理 token 超时问题
  //   ElMessage.error(error.response?.data?.msg) // 提示错误信息
  //   return Promise.reject(error)
  // }
)
export default service